package com.zx.notification.common.model;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

import java.io.Serializable;
import java.time.LocalDateTime;

@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class NotificationPushTasks implements Serializable {
    /**
     * 任务ID
     */
    private String id;

    /**
     * 通知ID
     */
    private String notificationId;

    /**
     * 渠道类型
     */
    private String channelType;

    /**
     * 消息队列类型
     */
    private String mqType;

    /**
     * 消费模式: QUEUE-点对点,TOPIC-广播
     */
    private String consumeMode;

    /**
     * 目标名称: 根据消费模式选择对应的目标名称(QUEUE模式取queue_name，TOPIC模式取topic_name)
     */
    private String destinationName;

    /**
     * 目标类型: 根据消费模式选择对应的目标类型(QUEUE模式取queue_destination_type，TOPIC模式取topic_destination_type)
     */
    private String destinationType;

    /**
     * 路由键(RabbitMQ专用)
     */
    private String routingKey;

    /**
     * 标签(RocketMQ专用)
     */
    private String tag;

    /**
     * 状态: PENDING-待发送,SENDING-发送中,SUCCESS-发送成功,FAILED-发送失败
     */
    private String status;

    /**
     * 重试次数
     */
    private Integer retryCount;

    /**
     * 错误信息
     */
    private String errorMsg;

    /**
     * 发送时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime sentTime;

    /**
     * 外部消息ID: 第三方消息服务返回的消息标识，如短信平台的SMS_ID、邮件服务的Message-ID、推送平台的MsgID等，用于消息追踪和状态查询
     */
    private String externalMsgId;

    /**
     * 推送策略
     */
    private String pushStrategy;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;


}